import moment, { Moment } from 'moment';

// ant design form validate

export const validateMailAddressee = (rule: any, value: string) => {
  let msg = '';
  value = value ? value.trim() : '';
  if (!value) {
    msg = '必须输入邮箱地址';
  } else {
    const addressList: string[] = value.split(';').map(item => item.trim());
    const reg = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/i;
    const index = addressList.findIndex((num) => !reg.test(num));
    if (index !== -1) {
      msg = '邮箱格式不正确';
    }
  }
  return msg ? Promise.reject(msg) : Promise.resolve();
};

// 手机号校验
export const validatePhone = (rule: any, value: string, text: string) => {
  let msg = "";
  value = value ? value.trim() : '';
  if (value) {
    const reg = /^1[3-9]\d{9}$/;
    if(!reg.test(value)){
      msg = `请输入正确的${text || "手机号"}`
    }
  }
  return msg ? Promise.reject(msg) : Promise.resolve();
}

// 纯数字校验
export const validateNumber = (rule: any, value: string, len?: number) => {
  let msg = "";
  value = value ? value.trim() : '';
  if (value) {
    const reg = /^[0-9]*$/;
    if(!reg.test(value)){
      msg = `请输入数字`
    } else if(len && value.length !== len){
      msg = `请输入${len}位数字`
    }
  }
  return msg ? Promise.reject(msg) : Promise.resolve();
}

// 数字或字母
export const validateNumberOrLetter = (rule: any, value: string) => {
  let msg = "";
  value = value ? value.trim() : '';
  if (value) {
    const reg = /^[A-Za-z0-9]+$/;
    if(!reg.test(value)){
      msg = `只能输入数字或字母`
    }
  }
  return msg ? Promise.reject(msg) : Promise.resolve();
}

// 身份证
export const validateIDCard = (rule: any, value: string) => {
  let msg = "";
  value = value ? value.trim() : '';
  if (value) {
    const reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
    if(!reg.test(value)){
      msg = `请输入正确的身份证号码`
    }
  }
  return msg ? Promise.reject(msg) : Promise.resolve();
}

export const validatePassword = (rule: any, value: string) => {
  let msg = '';
  if (!value || !value.trim()) {
    msg = '不能为空';
  } else {
    if (!/^(?![0-9]+$)(?=.*[A-Z])[0-9A-Za-z]{6,}$/.test(value)) {
      msg = '长度至少六位包含一个大写字母';
    }
  }
  return msg ? Promise.reject(msg) : Promise.resolve();
};

export const validateUserName = (rule: any, value: string) => {
  let msg = '';
  if (!value || !value.trim()) {
    msg = '用户名不能为空';
  } if (value && value.trim().length > 20) {
    msg = '用户名不能超过20个字符';
  }
  return msg ? Promise.reject(msg) : Promise.resolve();
};

export const validateCurrentTime = (rule: any, value: Moment) => {
  let msg = '';
  if (!value || value.isBefore(moment(), 'second')) {
    msg = '发送时间必须大于当前时间';
  }
  return msg ? Promise.reject(msg) : Promise.resolve();
};

export const validateSpace = (rule: any, value: string) => {
  const reg = /^\s+|\s+$/;
  const isWhitespace = reg.test(value);
  if (!isWhitespace) {
    return Promise.resolve();
  } else {
    return Promise.reject('内容前后不能含有空格');
  }
};

// use: validateRequired.bind(null,'xxxxx')
export const validateRequired = (...args: any[]) => {
  let msg = '';
  const reg = /^[0-9]*$/;
  let value = args[2] ? args[2].trim() : '';
  value = value.replace('+', '');
  if (!value || !reg.test(value)) {
    msg = args[0];
  }
  return msg ? Promise.reject('请输入正确的' + msg) : Promise.resolve();
};

//50字以内的校验
 //自定义校验，备注50字以内
 export const validatorAgree = (rule: any, value: any) => {
  let msg = '';
  if (value && value.trim().length > 50) {
    msg = '备注不能超过50个字符';
  }
  return msg ? Promise.reject(msg) : Promise.resolve();
}
